<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<!-- 

    构造方法创建对象：之所以用构造方法创建对象就是为了解决工厂模式不能识别对象类型的问题
    构造方法也叫构造器，它的本质是一个函数，它能够批量处理具体同种属性且同种类型的对象

    构造方法的滴滴滴
 -->

<body>
    <script>
        //定义一 个构造方法 创建人类对象
        function Person(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;

            this.speak = function() {
                console.log('hello world');
            }
        }

        // 构造方法的调用

        var p1 = new Person('Tom', 10, '男');
        var p2 = new Person('All', 19, '男');
        console.log(p1);
        console.log(p2);

        //构造方法执行的流程
        // 将实参传递给形参(如果有)
        // 创建一个空对象
        //将this指向这个对象 将this


        // instanceof 运算符
        // 作用：判断某个对象是否属于某种类型
        // 格式：对象名称 instanceof  类型；如果结果为true则表示该对象属于这种类型否则不属于这种类型

        function Like(name, age) {
            this.name = name;
            this.age = age;
            this.eat = function() {
                console.log('爱吃丸子');
            }
        }

        var p1 = new Like('Lily', 15);
        console.log(p1);

        var res = p1 instanceof Like;
        console.log(res); //true

        //typeof  运算符
        //作用：判断某个数是什么类型

        // 格式：typeof 数据

        function Person(name, age) {
            this.name = name;
            this.age = age;
        }

        function fn() {
            console.log(this); //window对象
        }

        fn();

        // in判断对象中是否有这个shuxing
        var obj = {
            a: 1,
            b: 2,
            c: 3
        };
        console.log('a' in obj); //true
        console.log('aa' in obj); //false


        //for in循环遍历对象的所有属性
        for (var i in obj) {
            console.log(i);
        }
    </script>
</body>

</html>